package Unicart.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;

import static org.openqa.selenium.support.ui.ExpectedConditions.*;

public class BasketPage extends AnyPage {

	public BasketPage(PageManager pages) {
		super(pages);
	}
	
	@FindBy(xpath ="//*[@value='Оформить заказ']")
	private WebElement goToStep2Button;
	
	@FindBy(xpath = "//../../../div/a[@title='Удалить']")
	private WebElement buttonDelete;
	
	@FindBy(name = "quantity")
	private WebElement productQuantity;
	
	@FindBy (id ="b-coupon-data_lot")
	private WebElement couponSeriesField;
	
	@FindBy (id ="coupon-data_number")
	private WebElement couponNumberField;
	
	@FindBy (xpath ="//*[@value='Активировать']")
	private WebElement activateButton;
	
	
	public BasketPage ensurePageLoaded() {
		super.ensurePageLoaded();
		wait.until(presenceOfElementLocated(By.xpath("//div[.='Ваша корзина']")));
		return this;
	}
  
	public boolean checkProduct (String title) {
		return 
			driver.findElements(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/a[@title='Удалить']")).size() > 0;
	}
	
	public boolean checkQuantity(String quantity) {
		String res = null;
		res = productQuantity.getAttribute("value");
		return res.equals(quantity);
	}
	
	
	public ClientDataPage clickGoToStep2Button() {
		goToStep2Button.click();
		return pages.clientDataPage;
	}
	
	//Получаем кнопку "Удалить" для продукта в корзине. title - название продукта.
	public WebElement getButtonDeleteForProduct(String title) {
		WebElement result = getWebDriver().findElement(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/a[@title='Удалить']"));
	    return result;
	}
	
	//Кликаем на кнопку "Удалить" для конкретного продукта
	public void clickButtonDeleteForProduct(String title) {
		getButtonDeleteForProduct(title).click();
	}	
	
	public BasketPage clickButtonDelete() {
		buttonDelete.click();
		return this;
	}
		
	public BasketPage setProductQuantity(String text) {
		productQuantity.click();
		productQuantity.clear();
		productQuantity.sendKeys(Keys.HOME);
		productQuantity.sendKeys(text);
		return this;
	}
	
	public boolean checkRecommendedBlock() {
		return
			driver.findElements(By.xpath("//div/div/div[contains(text(),'рекомендует')]")).size() > 0;
	}
	
	//Получаем кнопку "Добавить" для рекомендуемого продукта. title - название продукта.
	public WebElement getButtonAddForRecommendedProduct(String title) {
		WebElement result = getWebDriver().findElement(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/span/span/a[contains(text(),'Добавить')]"));
		return result;
	}

	//Кликаем на кнопку "Добавить" для конкретного продукта 
	public void clickOnButtonAddForRecommendedProduct(String title) {
		getButtonAddForRecommendedProduct(title).click();
	}
		
	//Получаем кнопку "Удалить" для продукта в корзине. title - название продукта.
	public WebElement getButtonDeleteForBasketProduct(String title) {
        WebElement result = getWebDriver().findElement(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/a[@title='Удалить']"));
        return result;
    }
	
	//Кликаем на кнопку "Удалить" для конкретного продукта
	public void clickOnButtonDeleteForProductInBasket(String title) {
		getButtonDeleteForBasketProduct(title).click();
	}

	public boolean checkProductInRecommendedBlock(String title) {
		return 
			driver.findElements(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/span/span/a[contains(text(),'Добавить')]")).size() > 0;
	}

	public boolean checkProductInBasketBlock(String title) {
		return 
			driver.findElements(By.xpath("//span[contains(text(),'"+title+"')]/../../../div/a[@title='Удалить']")).size() > 0;
	}

	public boolean checkCouponBlock() {
		return
			driver.findElements(By.xpath("//div/div/div[contains(text(),'Активация скидочного купона')]")).size() > 0;
	}

	public BasketPage setCouponSeriesInBasket(String couponSeries) {
		couponSeriesField.sendKeys(couponSeries);
		return this;
	}
	
	public BasketPage setCouponNumberInBasket(String couponNumber) {
		couponNumberField.sendKeys(couponNumber);
		return this;
	}
	
	public BasketPage clickActivateButton() {
		activateButton.click();
		return this;
	}

	public boolean checkCouponInBasket() {
		return
			driver.findElements(By.className("b-coupon-data_note_success")).size() > 0;
	}

	
	private Select currencyDropdown() {
	    return new Select(driver.findElement(By.id("currency")));
	}
	
	public BasketPage setOrderCurrency(String value) {
		currencyDropdown().selectByValue(value);
		return this;		
	}
	
	public void checkCurrency(String text) {
		wait.until(presenceOfElementLocated(By.xpath("//span[contains(text(),'"+text+"')]")));
	}
	
	private Select regionDropdown() {
	    return new Select(driver.findElement(By.id("region")));
	}
	
	public BasketPage setRegionForDelivery(String value) {
		regionDropdown().selectByVisibleText(value);
		return this;		
	}
		
}
